import pygame, sys, os
from pygame.locals import *


##############################################################################
#basic tutorial script to figure out how to use sprites
#extra function used to quit on any button
#quit can also be done on the window
#not really much of interest
##############################################################################




##############################################################################
#move box class
##############################################################################
class MoveBox(pygame.sprite.Sprite):
	def __init__(self, color, initialPosition):
		pygame.sprite.Sprite.__init__(self)
		self.image = pygame.Surface([30, 30])
		self.image.fill(color)
		self.rect = self.image.get_rect()
		self.rect.topleft = initialPosition
		self.goingDown = True #Starts going down
		self.nextUpdateTime = 0 #update() has not been called yet 
		
	def update(self, currentTime, bottom):
		#update every 10millisec = 1/100th of sec
		if self.nextUpdateTime < currentTime:
			#if at the top or bottom switch directions
			if self.rect.bottom == bottom - 1:
				self.goingDown = False
			elif self.rect.top == 0:
				self.goingDown = True
			
			#move position up or down by one pixel
			if self.goingDown:
				self.rect.top += 1
			else:
				self.rect.top -=1
			
			self.nextUpdateTime = currentTime + 10
			
##############################################################################
	
	
		
		
		
##############################################################################	
#display
##############################################################################
pygame.init()

###########################
#set box color and position
############################
boxes = pygame.sprite.RenderUpdates()
for color, location in [([255, 0, 0], [0,0]),#red
						([128, 0, 0], [120,0]),
						([64, 0, 0], [240,0]),
						
						([0, 255, 0], [0, 120]),#blue
						([0, 128, 0], [120, 120]),
						([0, 64, 0], [240, 120]),
						
						([0,0,255], [0,240]),#green
						([0,0,128], [120,240]),
						([0,0,64], [240, 240])]:
						
	boxes.add(MoveBox(color, location))
	
#Screen size
screen = pygame.display.set_mode([300, 300]) 
pygame.display.set_caption('Sprite Testing')

#######
#Quit
########

def input(events):
	for event in events:
		if event.type == QUIT:
			sys.exit(0)
################
#background
####################
background = pygame.Surface([300, 300])
background.fill([0,0,0])
screen.blit(background, [0,0])

##########
#main game
##########
while pygame.event.poll().type != KEYDOWN:
	input(pygame.event.get()) 
	#save time by calling this only once
	boxes.update(pygame.time.get_ticks(), 300)
	rectlist = boxes.draw(screen)
	pygame.display.update(rectlist)
	pygame.time.delay(10)
	boxes.clear(screen, background)